package fileUtils;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

/**
 * 文件搜索工具类
 */
public class SearchUtil {

    /**
     * 在一个文件夹中，搜索包含特定字符的文件
     *
     * @param targetWord    目标字符串
     * @param dirPath       文件夹绝对路径
     * @param fileExtension 文件类型（扩展名）
     * @throws IOException 读文件异常
     */
    public static void SearchWord(String targetWord, String dirPath, String fileExtension) throws IOException {

        File dir = new File(dirPath);
        if (!dir.isDirectory()) {
            throw new IOException("目标路径的类型不是文件夹");
        }
        //目标文件夹中的所有文件
        File[] files = dir.listFiles();
        List<String> result = new ArrayList<>();
        if (files != null) {
            for (File file : files) {
                //文件的绝对路径
                String absolutePath = file.getAbsolutePath();
                //跳过不符合文件类型要求的文件
                if (!absolutePath.endsWith(fileExtension)) {
                    continue;
                }
                BufferedReader reader = new BufferedReader(new FileReader(absolutePath));
                String line;
                while ((line = reader.readLine()) != null) {
                    if (line.indexOf(targetWord) > 0) {
                        //当前文件中存在目标字符串，将文件名写入返回结果集
                        result.add(file.getName());
                        break;
                    }
                }
                reader.close();
            }
        }
        System.out.println(result);
    }
}
